It's All Abount Complexity
『複雑さがすべて』
プログラマに必要なものは「創造的な頭脳」と「思考を整理する能力」である
ソフトウェアを書く上での限界は、「自分たちが作っているシステムを理解する能力」で決まる
「複雑さ」はこの「理解」を阻害する
「複雑さ」はコンポーネント間の依存関係が蓄積して生じる
「複雑さ」を軽減することがソフトウェア設計で最も重要である
優れたツールは次々に登場しているが限界がある
「複雑さ」を無くす(シンプルにする)しか無い
「複雑さ」を無くす2つの方法
コードをよりシンプルで分かりやすく
「複雑さ」をカプセル化する
モジュール設計
ソフトウェアを OOP のクラスのようなモジュールに分割する
他のモジュールの詳細を知らずに実装できる
ソフトウェア設計は継続的なプロセス
この点が物理的システムと異なる
各フェーズの担当者が異なるケースも多い
大規模なソフトウェアシステムを、事前にすべて可視化するのは不可能
初期設計は問題が多数あり、その問題が顕在化するのは実装がすすんでからである
インクリメンタルアプローチ = 設計に終わりがない
設計の改善する機会を伺う…など
設計で重要なのは「複雑さ」を軽減することなので、常に「複雑さ」を考えることが大切